package part02_单例模式;

/**懒汉式（线程不安全）
 * @ClassName: SingletonTest02
 * @Author: AllenSun
 * @Date: 2019/12/4 21:41
 */
public class SingletonTest03 {
    public static void main(String[] args) {
        //优缺点跟之前一样，浪费内存
        Singleton03 instance01=Singleton03.getInstance();
        Singleton03 instance02=Singleton03.getInstance();
        System.out.println(instance01==instance02);
        System.out.println("instance01-hashCode="+instance01.hashCode());
        System.out.println("instance02-hashCode="+instance02.hashCode());
    }
}
/**优缺点：
 * 1-起到了懒加载的效果，但是只能在单线程下使用
 * 2-如果在多线程下，一个线程进入了if语句，还没来得及往下执行，另一个线程也通过这个if语句，这样就会产生多个实例
 * 所以说：在实际开发中，不要使用这种方式
 *
 * @MethodName:
 * @Author: AllenSun
 * @Date: 2019/12/4 21:58
 */
class Singleton03{
    //1-构造器私有化
    private Singleton03(){ }
    //2-本类内部创建对象实例
    private static Singleton03 instance;
    //3-提供一个公有的静态方法，当使用到这个方法时，才去创建instance
    //懒汉式
    public static Singleton03 getInstance(){
        if(instance==null){
            instance=new Singleton03();
        }
        return instance;
    }
}